package com.lnsoft.cac.server.handle.codec.frameMessage;


import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.Data;
import lombok.NonNull;

@Data
/**
 * 配置/状态交互---装置ID查询设置
 * */
public class Cfg_ID_Msg {
    private int Request_Set_Flag;       //1byte     参数配置类型标识；①0x00查询装置ID②0x01设置装置ID
    private byte[] Original_ID;         //17byte    原始生产编号，由7位厂家编码和10位各厂家内部装置编号组成，在出厂时固化，用于设置ID时校验。
    private byte[] NEW_Device_Code;     //17byte    电压监测仪新设置的ID（17位编码）


    public ByteBuf toByteBuf() throws Exception{
        if (Request_Set_Flag != (byte)0x00 && Request_Set_Flag != (byte)0x01) {
            throw new Exception("参数配置类型标识 设置异常");
        }
        if (Original_ID == null) {
            Original_ID = new byte[17];
        }
        if (Original_ID.length != 17) {
            throw new Exception("原始生产编号 设置异常");
        }
        if (NEW_Device_Code == null) {
            NEW_Device_Code = new byte[17];
        }
        if (NEW_Device_Code.length != 17) {
            throw new Exception("电压监测仪新设置的ID 设置异常");
        }
        ByteBuf bf = Unpooled.buffer(35);
        bf.writeByte(Request_Set_Flag);
        bf.writeBytes(Original_ID);
        bf.writeBytes(NEW_Device_Code);
        return bf;
    }


    //  解析 { 配置/状态交互---装置ID查询设置} 帧报文内容区 到消息体中
    public static Cfg_ID_Msg decFrameBody(@NonNull byte[] frameBody) throws Exception {
        ByteBuf bf = Unpooled.wrappedBuffer(frameBody);
        Cfg_ID_Msg msg = new Cfg_ID_Msg();
        int len = frameBody.length;
        if (len == 0) {
            return null;
        }
        msg.setRequest_Set_Flag(bf.getByte(0) & 0xFF);
        byte[] Original_ID = new byte[17];
        bf.getBytes(1, Original_ID, 0, 17);
        msg.setOriginal_ID(Original_ID);
        byte[] NEW_Device_Code = new byte[17];
        bf.getBytes(18, NEW_Device_Code, 0, 17);
        msg.setOriginal_ID(NEW_Device_Code);

        return msg;
    }

}
